#ifndef PLAYLISTS_H
#define PLAYLISTS_H

#include <QString>
#include <QMap>
#include <QStandardItemModel>
#include <QStandardItem>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QFile>
#include <QtXml>

class PlayLists : public QObject
{
    Q_OBJECT
public:
    /*
    Структура для хранения экземпляра плейлиста
    <owner_id>66559</owner_id>
    <album_id>14969987</album_id>
    <title>Зимовье Зверей</title>
    */
    struct List
    {
        QString owner_id;
        QString album_id;
        QString title;
        QStandardItemModel *model_playlist; //Указатель на сам модель
        int current_track; //Номер текущего трека, для каждого трека свой
    };

    PlayLists(QString *accessToken);

public slots:
    void AddPlayList(QString playlist_name);
    bool removePlayList(QString playlist_name);
    bool addInPlayList(int track, QString from_playlist_name, QString to_playlist_name);
    bool setCurrentPlayList(QString playlist_name);
    PlayLists::List* getCurrentPlayList();
    int getCurrentTrack();
    bool setCurrentTrack(int currentTrack);
    bool searchTrack(QString track_name);
    bool saveToFile(QString playlist_name);
private:
    QString audioGetUrl;
    QString audioSearchUrl;
    QString searchTextBuffer;
    QString *accessToken;
    PlayLists::List *struct_playlistCurrent; //текущий
    PlayLists::List *struct_playlistFull; //Основной
    PlayLists::List *struct_playlistSearch; //Для поиска
    QMap<QString, PlayLists::List*> *map_playlist;
    QNetworkRequest *request_getAllPlayLists; //Для получения списка всех плейлистов
    QNetworkRequest *request_getPlayList;   //Для получения одного плейлиста с списком песен
    QNetworkAccessManager *manager;
    QDomDocument *xml_document;
private slots:
    void finishRequest(QNetworkReply *reply);
    void load_list(QString filename, QStandardItemModel *model, QByteArray source);
    void traverseNode(const QDomNode &node, QStandardItemModel *model);
};

#endif // PLAYLISTS_H
